// class Solution {
//     public:
//         vector<int> findAnagrams(string s, string p) {
//             int len_s = s.size();
//             int len_p = p.size();
//             if (len_s < len_p) return {};
    
//             int hash1[26] = {0};
//             int hash2[26] = {0};
//             vector<int> ret;
    
//             // 初始化 p 的哈希表
//             for (char c : p) {
//                 hash1[c - 'a']++;
//             }
    
//             // 初始化 s 的前 len_p 个字符的哈希表
//             for (int i = 0; i < len_p; ++i) {
//                 hash2[s[i] - 'a']++;
//             }
    
//             // 检查初始窗口是否匹配
//             if (equal(begin(hash1), end(hash1), begin(hash2))) {
//                 ret.push_back(0);
//             }
    
//             // 滑动窗口
//             for (int i = len_p; i < len_s; ++i) {
//                 hash2[s[i] - 'a']++;     // 添加新字符
//                 hash2[s[i - len_p] - 'a']--; // 移除旧字符
    
//                 // 检查当前窗口是否匹配
//                 if (std::equal(std::begin(hash1), std::end(hash1), std::begin(hash2))) {
//                     ret.push_back(i - len_p + 1);
//                 }
//             }
    
//             return ret;
//         }
//     };
class Solution {
    public:
        vector<int> findAnagrams(string s, string p) {
            vector<int> ans;
    
            // int arr_p[26]={0}; //p中每种字母的出现次数
            // int arr_s[26]={0}; //s中长为p.length()的子串
            array<int,26> arr_p{};
            array<int,26> arr_s{};
    
            for(char c:p)
            {
                arr_p[c-'a']++;
            }
    
            for(int r=0;r<s.length();r++)
            {
                arr_s[s[r]-'a']++;
                int l=r-p.length()+1;
                if(l<0){
                    continue; 
                }
                if(arr_p==arr_s)
                {
                    ans.push_back(l);
                }
               arr_s[s[l]-'a']--;
            }
    
            return ans;
    } 
    
    
    };